﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using DTO_MechSys;

namespace DAL_MechSys
{
    public class DALPagamento: DALBase
    {
        public void Excluir(int PagamentoID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirPagamento";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@PagamentoID", PagamentoID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Inserir(DTOPagamento dtoPagamento)
        {
            try
            {
                string storedProssidere = "sp_InserirPagamento";
                SqlParameter[] parameters =
                
                { 
                   new SqlParameter("@descricao", dtoPagamento.Descricao),
                   new SqlParameter("@numeroMaxParcela", dtoPagamento.NumeroMaxParcela) ,       
                   new SqlParameter("@juros", dtoPagamento.Juros) ,       
                   new SqlParameter("@valorMinParcela", dtoPagamento.ValorMinParcela) ,  

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Atualizar(DTOPagamento dtoPagamento)
        {
            try
            {
                string storedProssidere = "sp_AtualizarPagamento";
                SqlParameter[] parameters =

                {                  
                   new SqlParameter("@PagamentoID", dtoPagamento.PagamentoID),
                   new SqlParameter("@descricao", dtoPagamento.Descricao),    
                   new SqlParameter("@numeroMaxParcela", dtoPagamento.NumeroMaxParcela) ,       
                   new SqlParameter("@juros", dtoPagamento.Juros) ,       
                   new SqlParameter("@valorMinParcela", dtoPagamento.ValorMinParcela)        
                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOPagamento> BuscarPagamentosCadastrados()
        {
            List<DTOPagamento> lstPagamento = new List<DTOPagamento>();

            try
            {
                string storedProssidere = "sp_BuscarPagamentosCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOPagamento dtoPagamento = CriarPagamento(sqlDataReader);

                        lstPagamento.Add(dtoPagamento);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstPagamento;
        }

        public bool VerificaSePagamentoIDExiste(int PagamentoID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSePagamentoIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@PagamentoID", PagamentoID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        private DTOPagamento CriarPagamento(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOPagamento dtoPagamento = new DTOPagamento();

                if (!string.IsNullOrEmpty(sqlDataReader["PagamentoID"].ToString()))
                {
                    dtoPagamento.PagamentoID = (int)sqlDataReader["PagamentoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoPagamento.Descricao = (string)sqlDataReader["Descricao"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ValorMinParcela"].ToString()))
                {
                    dtoPagamento.ValorMinParcela = double.Parse(sqlDataReader["ValorMinParcela"].ToString());
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Juros"].ToString()))
                {
                    dtoPagamento.Juros = double.Parse(sqlDataReader["Juros"].ToString());
                }

                if (!string.IsNullOrEmpty(sqlDataReader["NumeroMaxParcela"].ToString()))
                {
                    dtoPagamento.NumeroMaxParcela = Int32.Parse(sqlDataReader["NumeroMaxParcela"].ToString());
                }
                return dtoPagamento;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public List<DTOPagamento> PesquisarPagamento(string descricao, int codigo)
        {
            List<DTOPagamento> lstPagamento = new List<DTOPagamento>();

            try
            {
                string storedProssidere = "sp_BuscarPagamentoPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", descricao),
                   new SqlParameter("@int", codigo)

                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOPagamento dtoProduto = CriarPagamento(sqlDataReader);

                        lstPagamento.Add(dtoProduto);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstPagamento;
        }

    }
}
